const bcrypt = require('bcryptjs')
const db = require('../db/index')

// =============================================================================
// 获取当前用户信息
exports.getUserInfo = async (req, res) => {
  const sql_uid_seek = `select * from users_mt where uid=?`
  // 注意：req 对象上的 user 属性，是 Token 解析成功，express-jwt 中间件帮我们挂载上去的
  await db.query(sql_uid_seek, req.user.uid, (err, results) => {
    if (err) return res.cc(err)
    // 执行 SQL 语句成功，但是查询到的数据条数不等于 1
    if (results.length != 1) return res.cc('获取用户信息失败!')

    const carId = results[0].carid
    if (carId) {
      const sql_carnumber_seek = `select carnumber from cars_mt where carid=?`
      let carnumber = ''
      db.query(sql_carnumber_seek, carId, (err, results) => {
        if (err) return res.cc(err)
        if (results.length != 1) return res.cc('获取用户车牌信息失败!')
        // 获取成功
        carnumber = results[0]
      })
    }
    console.log('carnumber', carnumber);
    // 获取权限数据
    const perId = results[0].perid
    // console.log('perId', perId);
    let menus = []
    const sql_permission_seek = `select * from permissions_mt where perid=?`
    if (perId+1) {
      const res = db.query(sql_permission_seek, perId, (err, results) => {
        if (err) return res.cc(err)
        if (results.length != 1) return res.cc('获取权限信息失败!')
        // 获取成功
        menus = { ...results[0] }
        console.log('menus',menus);
      })
    }
  })
    
  console.log(1111111, results[0]);
  const userinfo = {
    ...results[0],
    password: null,
    ustatus: null,
    carnumber,
    menus
  }
  // 用户信息获取成功
  res.send({
    status: 0,
    message: '获取用户信息成功',
    data: userinfo,
  })
}

// =============================================================================
// 更新用户基本信息的处理函数
exports.updateUserInfo = (req, res) => {
    const sql = `update ev_users set ? where id=?`
    db.query(sql, [req.body, req.body.id], (err, results) => {
        if (err) return res.cc(err)
        if (results.length != 1) return res.cc('修改用户信息失败!')

        // 修改用户信息成功
        return res.cc('修改用户基本信息成功!', 0)
    })
}

// =============================================================================
// 重置密码
exports.updatePassword = (req, res) => {
    // 定义根据 id 查询用户数据的 SQL 语句
    const searchSql = `select * from ev_users where id=?`
    // 执行 SQL 语句查询用户是否存在

    db.query(searchSql, req.user.id, (err, results) => {
        if (err) return res.cc(err)
        if (results.length !== 1) return res.cc('用户不存在!')
        // console.log(results);
        // console.log(req.body);
        // 判断提交的旧密码是否正确
        const compareResult = bcrypt.compareSync(req.body.oldPwd, results[0].password)
        console.log('compareResult', compareResult);
        if (!compareResult) return res.cc('原密码错误!')
        console.log('原密码验证正确...');

        // 定义更新用户密码的 SQL 语句
        const updateSql = `update ev_users set password=? where id=?`

        // 对新密码进行 bcrypt 加密处理
        const newPwd = bcrypt.hashSync(req.body.newPwd, 10)
        db.query(updateSql, [newPwd, req.user.id], (err, results) => {
            if (err) return res.cc(err)
            if (results.affectedRows !== 1) return res.cc('更新密码失败!')
            // 更新密码成功
            res.cc('更新密码成功!', 0)
        })
    })

}

// =============================================================================
// 更新用户头像
exports.updateAvatar = (req, res) => {
    // 定义更新用户头像的 SQL 语句
    const sql = `update ev_users set user_pic=? where id=?`

    db.query(sql, [req.body.avatar, req.user.id], (err, results) => {
        if (err) return res.cc(err)
        if (results.affectedRows !== 1) return res.cc('更新头像失败！')
        // 更新用户头像成功
        return res.cc('更新头像成功！', 0)
    })
}